library(readr)
library(tidyverse)
library(sf)
library(sp)
library(viridis)
library(tigris)
options(tigris_use_cache = T)

Load Data and Add Census Tracts

df = read_csv("Final_Cleaned_Data.csv", col_types = cols(GEOID = "c"))
dc_tracts = tracts(state = "DC", cb = T, year = 2022)
Using FIPS code '11' for state 'DC'
df = left_join(df, dc_tracts %>%
                 select(c(GEOID, geometry, ALAND, AWATER)), by = "GEOID")
summary(df)
    GEOID           TotalPopulation     DIABETES         CASTHMA      
 Length:206         Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
 Class :character   1st Qu.:0.2500   1st Qu.:0.2439   1st Qu.:0.2341  
 Mode  :character   Median :0.5000   Median :0.4976   Median :0.4951  
                    Mean   :0.4999   Mean   :0.4956   Mean   :0.4878  
                    3rd Qu.:0.7500   3rd Qu.:0.7500   3rd Qu.:0.7488  
                    Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
   m1_1_sch_1         m1_2_qua_1      total_score     crime_burden_per_1000
 Min.   :0.004854   Min.   :0.1141   Min.   :0.0000   Min.   :0.0000       
 1st Qu.:0.253641   1st Qu.:0.2536   1st Qu.:0.6134   1st Qu.:0.2206       
 Median :0.507282   Median :0.5024   Median :1.5482   Median :0.4461       
 Mean   :0.504854   Mean   :0.5024   Mean   :2.2279   Mean   :0.6735       
 3rd Qu.:0.756068   3rd Qu.:0.7512   3rd Qu.:3.2874   3rd Qu.:0.9895       
 Max.   :1.000000   Max.   :1.0000   Max.   :9.2010   Max.   :3.0459       
   percentile     weighted_mean_dist_m weighted_mean_percentile   LOWINCOME     
 Min.   :0.0000   Min.   : 112.9       Min.   : 4.733           Min.   :   0.0  
 1st Qu.:0.2488   1st Qu.: 289.0       1st Qu.:22.588           1st Qu.: 277.0  
 Median :0.4976   Median : 450.6       Median :39.535           Median : 570.5  
 Mean   :0.4976   Mean   : 513.7       Mean   :42.303           Mean   : 800.6  
 3rd Qu.:0.7464   3rd Qu.: 669.6       3rd Qu.:58.700           3rd Qu.:1164.8  
 Max.   :0.9951   Max.   :1855.9       Max.   :96.370           Max.   :3181.0  
   LOWINCPCT      UNEMPLOYED        UNEMPPCT      TRACT_COUNT_Alcohol_Li
 Min.   :0.00   Min.   :  0.00   Min.   :0.0000   Min.   :0.0000        
 1st Qu.:0.25   1st Qu.: 43.25   1st Qu.:0.2500   1st Qu.:0.2049        
 Median :0.50   Median : 97.00   Median :0.5000   Median :0.4683        
 Mean   :0.50   Mean   :137.20   Mean   :0.4998   Mean   :0.4724        
 3rd Qu.:0.75   3rd Qu.:197.50   3rd Qu.:0.7500   3rd Qu.:0.7366        
 Max.   :1.00   Max.   :564.00   Max.   :1.0000   Max.   :1.0000        
 TRACT_COUNT_Grocery_St TRACT_COUNT_Healthy_Co TRACT_COUNT_Independen
 Min.   :0.0000         Min.   :0.0000         Min.   :0.0000        
 1st Qu.:0.0000         1st Qu.:0.0000         1st Qu.:0.0000        
 Median :0.0000         Median :0.0000         Median :0.0000        
 Mean   :0.2520         Mean   :0.2036         Mean   :0.2131        
 3rd Qu.:0.6439         3rd Qu.:0.5634         3rd Qu.:0.7366        
 Max.   :0.9902         Max.   :1.0000         Max.   :1.0000        
 TRACT_COUNT_Leaking_Un TRACT_COUNT_Metro_Bus_ TRACT_COUNT_Metro_Stat
 Min.   :0.0000         Min.   :0.0000         Min.   :0.0000        
 1st Qu.:0.1854         1st Qu.:0.2488         1st Qu.:0.0000        
 Median :0.4780         Median :0.4976         Median :0.0000        
 Mean   :0.4705         Mean   :0.4831         Mean   :0.1480        
 3rd Qu.:0.7463         3rd Qu.:0.7317         3rd Qu.:0.0000        
 Max.   :1.0000         Max.   :1.0000         Max.   :0.9854        
 TRACT_COUNT_Parks_and_ TRACT_COUNT_Police_Sta TRACT_COUNT_Primary_Ca
 Min.   :0.0000         Min.   :0.00000        Min.   :0.0000        
 1st Qu.:0.0000         1st Qu.:0.00000        1st Qu.:0.0000        
 Median :0.3805         Median :0.00000        Median :0.0000        
 Mean   :0.3625         Mean   :0.06784        Mean   :0.1689        
 3rd Qu.:0.6976         3rd Qu.:0.00000        3rd Qu.:0.0000        
 Max.   :1.0000         Max.   :0.93171        Max.   :1.0000        
 TRACT_COUNT_Recreation dist_to_m_Alcohol_Li dist_to_m_Grocery_St dist_to_m_Healthy_Co
 Min.   :0.0000         Min.   :0.00         Min.   :0.00         Min.   :0.00        
 1st Qu.:0.0000         1st Qu.:0.25         1st Qu.:0.25         1st Qu.:0.25        
 Median :0.0000         Median :0.50         Median :0.50         Median :0.50        
 Mean   :0.2857         Mean   :0.50         Mean   :0.50         Mean   :0.50        
 3rd Qu.:0.6098         3rd Qu.:0.75         3rd Qu.:0.75         3rd Qu.:0.75        
 Max.   :0.9854         Max.   :1.00         Max.   :1.00         Max.   :1.00        
 dist_to_m_Independen dist_to_m_Leaking_Un dist_to_m_Metro_Bus_ dist_to_m_Metro_Stat
 Min.   :0.00         Min.   :0.00         Min.   :0.00         Min.   :0.00        
 1st Qu.:0.25         1st Qu.:0.25         1st Qu.:0.25         1st Qu.:0.25        
 Median :0.50         Median :0.50         Median :0.50         Median :0.50        
 Mean   :0.50         Mean   :0.50         Mean   :0.50         Mean   :0.50        
 3rd Qu.:0.75         3rd Qu.:0.75         3rd Qu.:0.75         3rd Qu.:0.75        
 Max.   :1.00         Max.   :1.00         Max.   :1.00         Max.   :1.00        
 dist_to_m_Parks_and_ dist_to_m_Police_Sta dist_to_m_Primary_Ca dist_to_m_Recreation
 Min.   :0.0000       Min.   :0.00         Min.   :0.00         Min.   :0.00        
 1st Qu.:0.2500       1st Qu.:0.25         1st Qu.:0.25         1st Qu.:0.25        
 Median :0.5000       Median :0.50         Median :0.50         Median :0.50        
 Mean   :0.4999       Mean   :0.50         Mean   :0.50         Mean   :0.50        
 3rd Qu.:0.7500       3rd Qu.:0.75         3rd Qu.:0.75         3rd Qu.:0.75        
 Max.   :1.0000       Max.   :1.00         Max.   :1.00         Max.   :1.00        
 TRACT_MEAN_ELEV  TRACT_MED_ELEV   TRACT_COUNT_Hospital TRACT_COUNT_Food_Access
 Min.   :0.0000   Min.   :0.0000   Min.   :0.00000      Min.   :0.0000         
 1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.00000      1st Qu.:0.2488         
 Median :0.0000   Median :0.0000   Median :0.00000      Median :0.4976         
 Mean   :0.2488   Mean   :0.2485   Mean   :0.06396      Mean   :0.4547         
 3rd Qu.:0.7427   3rd Qu.:0.7415   3rd Qu.:0.00000      3rd Qu.:0.7256         
 Max.   :1.0000   Max.   :1.0000   Max.   :1.00000      Max.   :1.0000         
 TRACT_COUNT_Public_House     ALAND             AWATER                 geometry  
 Min.   :0.0000           Min.   :  93419   Min.   :      0   POLYGON      :206  
 1st Qu.:0.0000           1st Qu.: 290739   1st Qu.:      0   epsg:4269    :  0  
 Median :0.0000           Median : 507150   Median :      0   +proj=long...:  0  
 Mean   :0.1766           Mean   : 768525   Mean   :  90824                      
 3rd Qu.:0.0000           3rd Qu.: 907396   3rd Qu.:   2424                      
 Max.   :1.0000           Max.   :6514228   Max.   :5139082                      
df_sf = st_as_sf(df)
df_sf$centroids = st_centroid(df_sf$geometry)

Plot Data

ggplot(data = df_sf) + 
  geom_sf(aes(geometry = geometry, fill = dist_to_m_Metro_Stat), color = NA) + 
  geom_sf(aes(geometry = centroids, size = CASTHMA), color = "black", alpha = 0.4) + 
  scale_fill_viridis(alpha = 0.9) +
  labs(title = "Plot of Distance to Metro Stations", 
       subtitle = "Percentile",
       y = "Longitude", x = "Latitude",
       fill = "Distance",
       size = "Asthma")

library(plotly)
p = ggplot(data = df_sf) + 
  geom_sf(aes(geometry = geometry, fill = dist_to_m_Metro_Stat), color = NA) + 
  geom_sf(aes(geometry = centroids, size = CASTHMA), color = "black", alpha = 0.4) + 
  scale_fill_viridis(alpha = 0.9) +
  labs(title = "Plot of Distance to Metro Stations", 
       subtitle = "Percentile",
       y = "Longitude", x = "Latitude",
       fill = "Distance",
       size = "Asthma")

ggplotly(p)

Plot Individual Indexes

names = names(df[, -c(1, ncol(df))])
for(i in 1:(ncol(df) - 2)) {
  plot = ggplot(data = df) +
    geom_sf(aes(geometry = geometry, fill = !!sym(names[i])), col = NA) + 
    scale_fill_viridis(alpha = 0.9) + 
    labs(x = "Latitude", y = "Longitude",
         title = paste("Plot of", names[i]),
         subtitle = "Percentile")
  ggsave(plot = plot, paste("./plots/", names[i], ".png", sep = ""))
}
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
Saving 7 x 7 in image
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHNwKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeSh0aWdyaXMpDQpvcHRpb25zKHRpZ3Jpc191c2VfY2FjaGUgPSBUKQ0KYGBgDQoNCiMgTG9hZCBEYXRhIGFuZCBBZGQgQ2Vuc3VzIFRyYWN0cw0KDQpgYGB7cn0NCmRmID0gcmVhZF9jc3YoIkZpbmFsX0NsZWFuZWRfRGF0YS5jc3YiLCBjb2xfdHlwZXMgPSBjb2xzKEdFT0lEID0gImMiKSkNCmRjX3RyYWN0cyA9IHRyYWN0cyhzdGF0ZSA9ICJEQyIsIGNiID0gVCwgeWVhciA9IDIwMjIpDQoNCmRmID0gbGVmdF9qb2luKGRmLCBkY190cmFjdHMgJT4lDQogICAgICAgICAgICAgICAgIHNlbGVjdChjKEdFT0lELCBnZW9tZXRyeSwgQUxBTkQsIEFXQVRFUikpLCBieSA9ICJHRU9JRCIpDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGRmKQ0KYGBgDQoNCmBgYHtyfQ0KZGZfc2YgPSBzdF9hc19zZihkZikNCmRmX3NmJGNlbnRyb2lkcyA9IHN0X2NlbnRyb2lkKGRmX3NmJGdlb21ldHJ5KQ0KYGBgDQoNCiMgUGxvdCBEYXRhDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBkZl9zZikgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9IGRpc3RfdG9fbV9NZXRyb19TdGF0KSwgY29sb3IgPSBOQSkgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBjZW50cm9pZHMsIHNpemUgPSBDQVNUSE1BKSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGFscGhhID0gMC45KSArDQogIGxhYnModGl0bGUgPSAiUGxvdCBvZiBEaXN0YW5jZSB0byBNZXRybyBTdGF0aW9ucyIsIA0KICAgICAgIHN1YnRpdGxlID0gIlBlcmNlbnRpbGUiLA0KICAgICAgIHkgPSAiTG9uZ2l0dWRlIiwgeCA9ICJMYXRpdHVkZSIsDQogICAgICAgZmlsbCA9ICJEaXN0YW5jZSIsDQogICAgICAgc2l6ZSA9ICJBc3RobWEiKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShwbG90bHkpDQpwID0gZ2dwbG90KGRhdGEgPSBkZl9zZikgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9IGRpc3RfdG9fbV9NZXRyb19TdGF0KSwgY29sb3IgPSBOQSkgKyANCiAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBjZW50cm9pZHMsIHNpemUgPSBDQVNUSE1BKSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNCkgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGFscGhhID0gMC45KSArDQogIGxhYnModGl0bGUgPSAiUGxvdCBvZiBEaXN0YW5jZSB0byBNZXRybyBTdGF0aW9ucyIsIA0KICAgICAgIHN1YnRpdGxlID0gIlBlcmNlbnRpbGUiLA0KICAgICAgIHkgPSAiTG9uZ2l0dWRlIiwgeCA9ICJMYXRpdHVkZSIsDQogICAgICAgZmlsbCA9ICJEaXN0YW5jZSIsDQogICAgICAgc2l6ZSA9ICJBc3RobWEiKQ0KDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIFBsb3QgSW5kaXZpZHVhbCBJbmRleGVzDQoNCmBgYHtyfQ0KbmFtZXMgPSBuYW1lcyhkZlssIC1jKDEsIG5jb2woZGYpKV0pDQpmb3IoaSBpbiAxOihuY29sKGRmKSAtIDIpKSB7DQogIHBsb3QgPSBnZ3Bsb3QoZGF0YSA9IGRmKSArDQogICAgZ2VvbV9zZihhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSwgZmlsbCA9ICEhc3ltKG5hbWVzW2ldKSksIGNvbCA9IE5BKSArIA0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpcyhhbHBoYSA9IDAuOSkgKyANCiAgICBsYWJzKHggPSAiTGF0aXR1ZGUiLCB5ID0gIkxvbmdpdHVkZSIsDQogICAgICAgICB0aXRsZSA9IHBhc3RlKCJQbG90IG9mIiwgbmFtZXNbaV0pLA0KICAgICAgICAgc3VidGl0bGUgPSAiUGVyY2VudGlsZSIpDQogIGdnc2F2ZShwbG90ID0gcGxvdCwgcGFzdGUoIi4vcGxvdHMvIiwgbmFtZXNbaV0sICIucG5nIiwgc2VwID0gIiIpKQ0KfQ0KYGBgDQo=